// 错误实例
// 暂时性死区

// var x = y,y = 1;
// function fn(){
//     console.log(x,y)
// }
// fn()

// // 不能重复
// function fn(){
//     let a = 1;
//     let a = 'a';

//     if(true){
//         let i = 123;
//         console.log(i)
//     }
// }
// fn();

// var 函数作用域
// let 块级作用域

// for(var i = 0;i<5;i++){

// }
// console.log(i)

// const 只读的常量 与let作用域 块级作用域
// const a = 1; // 字符串 数值 布尔
// // a = 2;
// const arr = []  // 数组
// arr.push(-1)
// console.log(arr)

// const obj = {}  // 对象
// obj.name = 'abe'
// console.log(obj)

// const w =1
// console.log(w)  //错误



// 解构 ES6 新特性
// let x = 1;
// let y = 2;
// let z = 3;

// let x = 1,y = 2,z = 3;

// let [x,y,z] = [1,2,3] // 数组解构的写法  解构赋值的模式
// // 数组模式  = (运算符) 值 模式对应的值
// console.log(x,y,z)

// let arr = ['1','2','3'];
// let [a,b,c] = arr;
// console.log(a,b,c)

// // 对象
// let obj ={
//     name:'sonia',
//     age:18
// }
// let {name,age} = {name:'sonia',age:18}
// console.log(name,age)

// let [a,,c] = [1,2,3]
// // a = 1, c = 3;
// console.log(a,c)

// let [a,b,c] = [1,2]
// console.log(a,b,c)

// let [a = 1] = ['a'] 
let [a = 1] = [] // 给a赋默认值 如果解构的值为undefined则取默认值
let [b = 1] = [null]
console.log(a)


let[a = b,b = 1] =[,8]
console.log(a)
console.log(b) 

// 对象解构
let {
    name:a,   // a是变量 name是模式
    age:b       // b是变量 age是模式
} = {
    age:20,name:'abc'
}
console.log(a)
console.log(b)


let a = 10;


let {name,age} = {
    name:'dovey',
    age:16
}
console.log(name,age)
console.log(a,b)



var [a,b,c] = 'hello'
console.log(a,b,c)


function fun([a,b]){
    return a+b;
}
console.log(fun([1,4]))

function fun1({a,b}={a:3,b:7}){
    return [a,b]
}
fun1()